home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 1.toast / Sample Code / Contributed / SpriteWorld / SpriteWorld Files / Headers / Sprite.h < prev    next >
Encoding:
Text File  |  2000-10-06  |  10.9 KB  |  427 lines  |  [TEXT/CWIE]

  1. ///--------------------------------------------------------------------------------------
  2. //    Sprite.h
  3. //
  4. //    Portions are copyright: c 1991-94 Tony Myles, All rights reserved worldwide.
  5. //
  6. //    Description:    constants, structures, and prototypes for sprites
  7. ///--------------------------------------------------------------------------------------
  8.  
  9.  
  10. #ifndef __SPRITE__
  11. #define __SPRITE__
  12.  
  13. #ifndef __SWCOMMON__
  14. #include <SWCommonHeaders.h>
  15. #endif
  16.  
  17. #ifndef __SPRITEFRAME__
  18. #include <SpriteFrame.h>
  19. #endif
  20.  
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24.  
  25. #if PRAGMA_ALIGN_SUPPORTED
  26. #pragma options align=mac68k
  27. #endif
  28.  
  29. ///--------------------------------------------------------------------------------------
  30. //    sprite type definitions
  31. ///--------------------------------------------------------------------------------------
  32.  
  33. typedef struct RectArray RectArray;
  34. typedef RectArray *RectArrayPtr, **RectArrayHdl;
  35.  
  36. typedef SW_FUNC void (*FrameProcPtr)(
  37.     SpritePtr srcSpriteP,
  38.     FramePtr curFrameP,
  39.     long *frameIndex);
  40.  
  41. typedef SW_FUNC void (*DrawProcPtr)(
  42.     FramePtr srcFrameP,
  43.     FramePtr dstFrameP, 
  44.     Rect *srcRect,
  45.     Rect *dstRect);
  46.  
  47. typedef SW_FUNC void (*MoveProcPtr)(
  48.     SpritePtr srcSpriteP);
  49.  
  50. typedef SW_FUNC void (*CollideProcPtr)(
  51.     SpritePtr srcSpriteP,
  52.     SpritePtr dstSpriteP,
  53.     Rect* sectRect);
  54.  
  55. typedef enum
  56. {
  57.     kSWDontRemoveSprite = 0,
  58.     kSWRemoveSprite,
  59.     kSWRemoveAndDisposeSprite
  60. } RemovalType;
  61.  
  62. typedef enum
  63. {
  64.     kSWWrapAroundMode = 0,
  65.     kSWPatrollingMode
  66. } AdvanceType;
  67.  
  68. typedef enum    // Used by SWFlipSprite.
  69. {
  70.     kSWFlipNone          = 0,
  71.     kSWFlipHorizontal     = 1,
  72.     kSWFlipVertical         = 2,
  73.     kSWFlipBoth             = 3
  74. } FlipType;
  75.  
  76. ///--------------------------------------------------------------------------------------
  77. //    Rect array data structure
  78. ///--------------------------------------------------------------------------------------
  79.  
  80. struct RectArray
  81. {
  82.     short        numFrames;
  83.     Rect        frameRects[];
  84. };
  85.  
  86. ///--------------------------------------------------------------------------------------
  87. //    sprite data structure
  88. ///--------------------------------------------------------------------------------------
  89.  
  90. struct SpriteRec
  91. {
  92.     SpriteLayerPtr    parentSpriteLayerP;    // the sprite layer this sprite is currently in
  93.     SpritePtr         nextSpriteP;        // next sprite in that layer
  94.     SpritePtr        prevSpriteP;        // previous sprite in that layer
  95.     SpritePtr        nextActiveSpriteP;    // next active sprite in the SpriteWorld
  96.     SpritePtr        nextIdleSpriteP;    // next idle sprite in the SpriteWorld
  97.     
  98.         // drawing fields
  99.     Boolean            isVisible;            // draw the sprite?
  100.     Boolean            needsToBeDrawn;        // sprite has changed, needs to be drawn
  101.     Boolean            needsToBeErased;    // sprite needs to be erased onscreen
  102.     char            pad1;                // (note: Boolean is the same as an unsigned char)
  103.     Rect            destFrameRect;        // frame destination rectangle
  104.     Rect            oldFrameRect;        // last frame destination rectangle
  105.     Rect            deltaFrameRect;        // union of the sprite's lastRect and curRect
  106.     DrawProcPtr        frameDrawProc;        // callback to draw sprite
  107.     short            tileDepth;            // the tile layers this sprite is under
  108.     
  109.         // drawing fields for scrolling routines
  110.     Boolean            destRectIsVisible;    // is destOffscreenRect visible on screen?
  111.     Boolean            oldRectIsVisible;    // was any part of the Sprite on the screen last frame?
  112.     Rect            clippedSourceRect;    // source sprite frame rect after clipping
  113.     Rect            destOffscreenRect;    // sprite's dest rect after clipping and offset
  114.  
  115.         // frame fields
  116.     FramePtr        *frameArray;        // array of frames
  117.     FramePtr        curFrameP;            // current frame
  118.     long            numFrames;            // number of frames
  119.     long            maxFrames;            // maximum number of frames
  120.     long            frameTimeInterval;    // time interval to advance frame
  121.     unsigned long     timeOfLastFrameChange; // time (from runningTimeCount) frame was last changed
  122.     long            frameAdvance;        // amount to adjust frame index
  123.     long            curFrameIndex;        // current frame index
  124.     long            firstFrameIndex;    // first frame to advance
  125.     long            lastFrameIndex;        // last frame to advance
  126.     FrameProcPtr     frameChangeProc;    // callback to change frames
  127.  
  128.         // movement fields
  129.     long            moveTimeInterval;    // time interval to move sprite
  130.     unsigned long     timeOfLastMove;        // time (from runningTimeCount) sprite was last moved
  131.     short            horizMoveDelta;        // horizontal movement delta
  132.     short            vertMoveDelta;        // vertical movement delta
  133.     Rect            moveBoundsRect;        // bounds of the sprite's movement
  134.     MoveProcPtr        spriteMoveProc;        // callback to handle movement
  135.     MoveProcPtr     realSpriteMoveProc;    // see SWTempSpriteMoveProc for more info.
  136.  
  137.         // collision detection
  138.     CollideProcPtr    spriteCollideProc;    // callback to handle collisions
  139.  
  140.         // miscellaneous
  141.     GWorldPtr        sharedPictGWorld;    // if common GWorld used for frames, here it is
  142.     GWorldPtr        sharedMaskGWorld;    // same for mask
  143.     RemovalType        spriteRemoval;        // whether to remove sprite, and if so, how.
  144.     AdvanceType        frameAdvanceMode;    // mode of automatic frame advancement
  145.     
  146.     
  147.         // extra blitter data
  148.     unsigned long    translucencyLevel;    // used by translucent blitter
  149.     unsigned long    rotation;            // used by rotation blitter
  150.     short            scaledWidth;        // used by scaling blitter
  151.     short            scaledHeight;        // used by scaling blitter
  152.     unsigned long    colorValue;            // used by solid color blitter
  153.     RGBColor        colorRGB;            // used by solid color blitter
  154.     Boolean            flippedHorizontal;    // used by BlitPixieFlip DrawProcs
  155.     Boolean            flippedVertical;    // used by BlitPixieFlip DrawProcs
  156.     short            pad2;                // (note: Boolean is the same as an unsigned char)
  157.     
  158.     long            userData;            // reserved for user
  159. };
  160.  
  161.  
  162. ///--------------------------------------------------------------------------------------
  163. //    sprite function prototypes
  164. ///--------------------------------------------------------------------------------------
  165.  
  166. SW_FUNC OSErr SWCreateSprite(
  167.     SpritePtr* newSpriteP,
  168.     void* spriteStorageP,
  169.     short maxFrames);
  170.  
  171. SW_FUNC OSErr SWCreateSpriteFromCicnResource(
  172.     SpriteWorldPtr destSpriteWorld,
  173.     SpritePtr* newSpriteP,
  174.     void* spriteStorageP,
  175.     short cIconID,
  176.     short maxFrames,
  177.     MaskType maskType);
  178.  
  179. SW_FUNC OSErr SWCreateSpriteFromPictResource(
  180.     SpriteWorldPtr destSpriteWorld,
  181.     SpritePtr* newSpriteP,
  182.     void* spriteStorageP,
  183.     short pictResID,
  184.     short maskResID,
  185.     short maxFrames,
  186.     MaskType maskType);
  187.  
  188. SW_FUNC OSErr SWCreateSpriteFromRLEResource(
  189.     SpritePtr *srcSpriteP,
  190.     void* spriteStorageP,
  191.     short rleResID,
  192.     short mask);
  193.     
  194. SW_FUNC OSErr SWCreateSpriteFromSinglePict(
  195.     SpriteWorldPtr destSpriteWorld,
  196.     SpritePtr* newSpriteP,
  197.     void* spriteStorageP,
  198.     short pictResID,
  199.     short maskResID,
  200.     short frameDimension,
  201.     short borderWidth,
  202.     MaskType maskType);
  203.  
  204. SW_FUNC OSErr SWCreateSpriteFromSinglePictXY(
  205.         SpriteWorldPtr destSpriteWorld,
  206.         SpritePtr* newSpriteP,
  207.         void* spriteStorageP,
  208.         short pictResID,
  209.         short maskResID,
  210.         short frameWidth,
  211.         short frameHeight,
  212.         short borderWidth,
  213.         short borderHeight,
  214.         short MaxFrames,
  215.         MaskType maskType);
  216.  
  217. SW_FUNC OSErr SWUpdateSpriteFromPictResource(
  218.     SpritePtr theSpriteP,
  219.     short pictResID);
  220.  
  221. SW_FUNC OSErr SWSaveRLESprite(
  222.     SpritePtr srcSpriteP,
  223.     short rleResID);
  224.  
  225. SW_FUNC void SWFlipSprite(
  226.     SpritePtr srcSpriteP,
  227.     FlipType direction );
  228.  
  229. SW_FUNC OSErr SWCloneSprite(
  230.     SpritePtr    cloneSpriteP,
  231.     SpritePtr*    newSpriteP,
  232.     void*        spriteStorageP);
  233.  
  234. SW_FUNC OSErr SWCloneSpriteFromTile(
  235.     SpriteWorldPtr spriteWorldP,
  236.     SpritePtr* newSpriteP,
  237.     void* spriteStorageP,
  238.     short firstTileID,
  239.     short lastTileID);
  240.  
  241. SW_FUNC void SWRemoveSpriteFromAnimation(
  242.     SpriteWorldPtr    spriteWorldP,
  243.     SpritePtr        spriteP,
  244.     Boolean            disposeOfSprite);
  245.     
  246. SW_FUNC void SWDisposeSprite(
  247.     SpritePtr *deadSpritePP);
  248.  
  249. SW_FUNC void SWCloseSprite(
  250.     SpritePtr deadSpriteP);
  251.  
  252. SW_FUNC void SWLockSprite(
  253.     SpritePtr srcSpriteP);
  254.  
  255. SW_FUNC void SWUnlockSprite(
  256.     SpritePtr srcSpriteP);
  257.  
  258. SW_FUNC OSErr SWAddFrame(
  259.     SpritePtr srcSpriteP,
  260.     FramePtr newFrameP);
  261.  
  262. SW_FUNC OSErr SWInsertFrame(
  263.     SpritePtr    srcSpriteP,
  264.     FramePtr    newFrameP,
  265.     long        frameIndex);
  266.  
  267. SW_FUNC void SWRemoveFrame(
  268.     SpritePtr srcSpriteP,
  269.     FramePtr oldFrameP);
  270.  
  271.  
  272. SW_FUNC void SWStdSpriteDrawProc(
  273.     FramePtr srcFrameP,
  274.     FramePtr dstFrameP,
  275.     Rect* srcRect,
  276.     Rect* dstRect);
  277.  
  278. SW_FUNC void SWStdSpriteColorDrawProc(
  279.     FramePtr srcFrameP,
  280.     FramePtr dstFrameP,
  281.     Rect* srcRect,
  282.     Rect* dstRect);
  283.  
  284. SW_FUNC void SWTempSpriteMoveProc(
  285.     SpritePtr srcSpriteP);
  286.  
  287. ///--------------------------------------------------------------------------------------
  288. //    Sprite Set-up functions
  289. ///--------------------------------------------------------------------------------------
  290.  
  291. SW_FUNC OSErr SWSetCurrentFrame(
  292.     SpritePtr srcSpriteP,
  293.     FramePtr curFrameP);
  294.  
  295. SW_FUNC void SWSetCurrentFrameIndex(
  296.     SpritePtr srcSpriteP,
  297.     short frameIndex);
  298.  
  299. SW_FUNC void SWSetSpriteCollideProc(
  300.     SpritePtr srcSpriteP,
  301.     CollideProcPtr collideProc);
  302.     
  303. SW_FUNC void SWSetSpriteColor(
  304.     SpritePtr srcSpriteP,
  305.     RGBColor *color);
  306.  
  307. SW_FUNC OSErr SWSetSpriteDrawProc(
  308.     SpritePtr srcSpriteP,
  309.     DrawProcPtr drawProc);
  310.  
  311. SW_FUNC void SWSetSpriteFlippedMode(
  312.     SpritePtr srcSpriteP,
  313.     Boolean flippedHorizontal,
  314.     Boolean flippedVertical);
  315.  
  316. SW_FUNC void SWSetSpriteFrameAdvance(
  317.     SpritePtr srcSpriteP,
  318.     short frameAdvance);
  319.  
  320. SW_FUNC void SWSetSpriteFrameAdvanceMode(
  321.     SpritePtr srcSpriteP,
  322.     AdvanceType advanceMode);
  323.  
  324. SW_FUNC void SWSetSpriteFrameRange(
  325.     SpritePtr srcSpriteP,
  326.     short firstFrameIndex,
  327.     short lastFrameIndex);
  328.  
  329. SW_FUNC void SWSetSpriteFrameTime(
  330.     SpritePtr srcSpriteP,
  331.     long timeInterval);
  332.  
  333. SW_FUNC void SWSetSpriteFrameProc(
  334.     SpritePtr srcSpriteP,
  335.     FrameProcPtr frameProc);
  336.  
  337. SW_FUNC void SWSetSpriteLocation(
  338.     SpritePtr srcSpriteP,
  339.     short horizLoc,
  340.     short vertLoc);
  341.  
  342. SW_FUNC void SWSetSpriteMoveBounds(
  343.     SpritePtr srcSpriteP,
  344.     Rect* moveBoundsRect);
  345.  
  346. SW_FUNC void SWSetSpriteMoveDelta(
  347.     SpritePtr srcSpriteP,
  348.     short horizDelta,
  349.     short vertDelta);
  350.  
  351. SW_FUNC void SWSetSpriteMoveTime(
  352.     SpritePtr srcSpriteP,
  353.     long timeInterval);
  354.  
  355. SW_FUNC void SWSetSpriteMoveProc(
  356.     SpritePtr srcSpriteP, MoveProcPtr moveProc);
  357.  
  358. SW_FUNC void SWSetSpriteVisible(
  359.     SpritePtr srcSpriteP,
  360.     Boolean isVisible);
  361.  
  362. SW_FUNC short SWGetSpriteVertLoc(
  363.     SpritePtr srcSpriteP);
  364.  
  365. SW_FUNC short SWGetSpriteHorizLoc(
  366.     SpritePtr srcSpriteP);
  367.  
  368. ///--------------------------------------------------------------------------------------
  369. //    Sprite Runtime functions
  370. ///--------------------------------------------------------------------------------------
  371.  
  372. SW_FUNC void SWMoveSprite(
  373.     SpritePtr srcSpriteP,
  374.     short horizLoc,
  375.     short vertLoc);
  376.  
  377. SW_FUNC void SWOffsetSprite(
  378.     SpritePtr srcSpriteP,
  379.     short horizOffset,
  380.     short vertOffset);
  381.  
  382. SW_FUNC Boolean SWBounceSprite(
  383.     SpritePtr srcSpriteP);
  384.  
  385. SW_FUNC Boolean SWWrapSprite(
  386.     SpritePtr srcSpriteP);
  387.  
  388. SW_FUNC Boolean SWRegionCollision(
  389.     SpritePtr srcSpriteP,
  390.     SpritePtr dstSpriteP);
  391.  
  392. SW_FUNC Boolean SWRadiusCollision(
  393.     SpritePtr srcSpriteP,
  394.     SpritePtr dstSpriteP);
  395.  
  396. SW_FUNC Boolean SWPixelCollision(
  397.     SpritePtr srcSpriteP,
  398.     SpritePtr dstSpriteP);
  399.  
  400. SW_FUNC Boolean SWRLECollision(
  401.     SpritePtr srcSpriteP,
  402.     SpritePtr dstSpriteP);
  403.  
  404. SW_FUNC Boolean SWIsSpriteInRect(
  405.     SpritePtr srcSpriteP,
  406.     Rect* testRect);
  407.  
  408. SW_FUNC Boolean SWIsSpriteFullyInRect(
  409.     SpritePtr srcSpriteP,
  410.     Rect* testRect);
  411.  
  412. SW_FUNC Boolean SWIsPointInSprite(
  413.     SpritePtr srcSpriteP,
  414.     Point testPoint);
  415.  
  416.  
  417. #if PRAGMA_ALIGN_SUPPORTED
  418. #pragma options align=reset
  419. #endif
  420.  
  421. #ifdef __cplusplus
  422. }
  423. #endif
  424.  
  425. #endif    /* __SPRITE__ */
  426.  
  427.